# -*- coding: utf-8 -*-
# @Time : 2021/6/14 2:20
# @Author : lanjy
# @Email : wayne_lau@aliyun.com
# @File : operator.py
# @Project : python_learn

# Python3 运算符
# Python 语言支持以下类型的运算符:
#
# 算术运算符
# 比较（关系）运算符
# 赋值运算符
# 逻辑运算符
# 位运算符
# 成员运算符
# 身份运算符
# 运算符优先级

print("===============================算术运算符===============================")
print("加：", 9 + 2 )
print("减：", 9 - 2 )
print("乘：", 9 * 2 )
print("除：", 9 / 2 )
print("取模：", 9 % 2 )
print("次幂：", 9 ** 2 )
print("取整除（ 向下取接近商的整数）：", 9 // 2 )


print("===============================比较运算符===============================")
a = 21
b = 10
c = 0

if (a == b):
    print("1 - a 等于 b")
else:
    print("1 - a 不等于 b")

if (a != b):
    print("2 - a 不等于 b")
else:
    print("2 - a 等于 b")

if (a < b):
    print("3 - a 小于 b")
else:
    print("3 - a 大于等于 b")

if (a > b):
    print("4 - a 大于 b")
else:
    print("4 - a 小于等于 b")

# 修改变量 a 和 b 的值
e = 5
f = 20
if (e <= f):
    print("5 - e 小于等于 f")
else:
    print("5 - e 大于  f")

if (e >= f):
    print("6 - e 大于等于 f")
else:
    print("6 - e 小于 f")


print("===============================赋值运算符===============================")
a = 21
b = 10
c = 0

c = a + b
print("1 - c 的值为：", c)

c += a
print("2 - c 的值为：", c)

c *= a
print("3 - c 的值为：", c)

c /= a
print("4 - c 的值为：", c)

c = 2
c %= a
print("5 - c 的值为：", c)

c **= a
print("6 - c 的值为：", c)

c //= a
print("7 - c 的值为：", c)

print("===============================位运算符===============================")
print("===============================要弄懂位运算符，要先知道二进制，与或非，左右位移===============================")

a = 60  # 60 = 0011 1100
b = 13  # 13 = 0000 1101
c = 0

c = a & b  # 12 = 0000 1100
print("1 - c 的值为：", c)

c = a | b  # 61 = 0011 1101
print("2 - c 的值为：", c)

c = a ^ b  # 49 = 0011 0001
print("3 - c 的值为：", c)

c = ~a  # -61 = 1100 0011
print("4 - c 的值为：", c)

c = a << 2  # 240 = 1111 0000
print("5 - c 的值为：", c)

c = a >> 2  # 15 = 0000 1111
print("6 - c 的值为：", c)




print("===============================逻辑运算符===============================")
print("===============================and 并且===============================")
print("===============================or或者===============================")
print("===============================not取反===============================")

a = True
b = False

if(a):
    print('a 是真',a)
else:
    print('a 是假',a)

if(b):
    print('b 是真',b)
else:
    print('b 是假',b)

if(a and b):
    print('变量 a 和 b 都为 true')
else:
    print('变量 a 或者 b 有一个为假')





print("===============================成员运算符===============================")
print("== =========in====如果在指定的序列中找到值返回 True，否则返回 False。===========================")
print("============not in====如果在指定的序列中没有找到值返回 True，否则返回 False。===========================")
a = 10
b = 20
list = [1, 2, 3, 4, 5]

if (a in list):
    print("1 - 变量 a 在给定的列表中 list 中")
else:
    print("1 - 变量 a 不在给定的列表中 list 中")

if (b not in list):
    print("2 - 变量 b 不在给定的列表中 list 中")
else:
    print("2 - 变量 b 在给定的列表中 list 中")

# 修改变量 a 的值
a = 2
if (a in list):
    print("3 - 变量 a 在给定的列表中 list 中")
else:
    print("3 - 变量 a 不在给定的列表中 list 中")



print("===============================身份运算符===============================")
print("===============================is 是判断两个标识符是不是引用自一个对象=============================")
print("===============================is not 判断两个标识符是不是引用自不同对象=============================")

a = 20
b = 20

if (a is b):
    print("1 - a 和 b 引用自同一个对象")
else:
    print("1 - a 和 b 引用自不同一个对象")

if ( id(a) == id(b) ):
   print ("2 - a 和 b 有相同的标识：",id(a))
   print ("2 - a 和 b 有相同的标识：",id(b))
else:
   print ("2 - a 和 b 没有相同的标识：",id(a))
   print ("2 - a 和 b 没有相同的标识：",id(b))

# 修改变量 b 的值
b = 30
if (a is b):
    print("3 - a 和 b 引用自同一个对象")
else:
    print("3 - a 和 b 引用自不同一个对象")

if ( id(a) == id(b) ):
   print ("4 - a 和 b 有相同的标识：",id(a))
   print ("4 - a 和 b 有相同的标识：",id(b))
else:
   print ("4 - a 和 b 没有相同的标识：",id(a))
   print ("4 - a 和 b 没有相同的标识：",id(b))


str1 = "20"
str2 = "20"

if (str1 is str2):
    print("1 - str1 和 str2 引用自同一个对象")
else:
    print("1 - str1 和 str2 引用自不同一个对象")

if ( id(str1) == id(str2) ):
   print ("2 - str1 和 str2 有相同的标识：",id(str1))
   print ("2 - str1 和 str2 有相同的标识：",id(str2))
else:
   print ("2 - str1 和 str2 没有相同的标识：",id(str1))
   print ("2 - str1 和 str2 没有相同的标识：",id(str2))